{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "747db91a-e1dc-45df-88b8-fa114deca073",
   "metadata": {},
   "source": [
    "# pandas1-Series\n",
    "\n",
    "两个核心的数据类型：\n",
    "\n",
    "- Series 数据系列。一维表\n",
    "- DataFrame 数据框。二维表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e0e7bb3a-7968-4a4a-b6de-7aa629f2f78a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9113008c-868f-4d9a-a36a-86a3c1dbb4ec",
   "metadata": {},
   "source": [
    "## 创建Series\n",
    "\n",
    "Series实际上是一个二维数组，其中一个数组用于保存索引，另一个数组用于存储数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "df76c23d-ff9f-4638-8742-bfbe2a8245f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "一季度    120\n",
       "二季度    380\n",
       "三季度    250\n",
       "四季度    360\n",
       "dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过列表创建\n",
    "ser1 = pd.Series(data=[120, 380, 250, 360], index=['一季度', '二季度', '三季度', '四季度'])\n",
    "ser1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "118eb2fe-4658-4e58-a518-f93471d975a2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "一季度    320\n",
       "二季度    180\n",
       "三季度    300\n",
       "四季度    405\n",
       "dtype: int64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过字典创建\n",
    "ser2 = pd.Series({'一季度': 320, '二季度': 180, '三季度': 300, '四季度': 405})\n",
    "ser2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2d1abbe7-da8e-4880-b17f-0bbbf4192bfa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    120\n",
       "1    380\n",
       "2    250\n",
       "3    360\n",
       "dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 默认的索引和列表相同，从0开始\n",
    "ser = pd.Series(data=[120, 380, 250, 360])\n",
    "ser"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "004ec0d2-a260-4a10-ae43-d18fa6362b7b",
   "metadata": {},
   "source": [
    "## 数学运算\n",
    "\n",
    "运算规则和NumPy向量类似"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "96ad6b70-9dae-489d-a4ab-58a47648df45",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "一季度    140\n",
      "二季度    400\n",
      "三季度    270\n",
      "四季度    380\n",
      "dtype: int64\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "一季度    150\n",
       "二季度    410\n",
       "三季度    280\n",
       "四季度    390\n",
       "dtype: int64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 加法运算\n",
    "print(ser1)\n",
    "ser1 += 10\n",
    "ser1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "37d1e633-5f7a-45a5-ac20-4b1edbe16bf8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(一季度    140\n",
       " 二季度    400\n",
       " 三季度    270\n",
       " 四季度    380\n",
       " dtype: int64,\n",
       " 一季度    320\n",
       " 二季度    180\n",
       " 三季度    300\n",
       " 四季度    405\n",
       " dtype: int64,\n",
       " 一季度    460\n",
       " 二季度    580\n",
       " 三季度    570\n",
       " 四季度    785\n",
       " dtype: int64)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 向量运算\n",
    "ser1, ser2, ser1 + ser2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b92ed7b8-c2e7-415d-bc57-eea80f7c6f98",
   "metadata": {},
   "source": [
    "## 索引\n",
    "\n",
    "Series有两个索引，隐式索引和显式索引\n",
    "\n",
    "- 隐式索引，数组索引，Series的默认索引\n",
    "- 显式索引，创建Series时手动指定的索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "2b2e3217-0914-42f7-9093-31d7e456e62b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(一季度    150\n",
       " 二季度    410\n",
       " 三季度    280\n",
       " 四季度    390\n",
       " dtype: int64,\n",
       " np.int64(280))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 隐式索引\n",
    "ser1, ser1.iloc[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "bd786fae-9ed2-47fe-8279-b09a1248586b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(280)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 显式索引\n",
    "ser1['三季度']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "d2dd402e-38a7-4044-8229-bc767e46327b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "一季度    380\n",
       "二季度    410\n",
       "三季度    280\n",
       "四季度    390\n",
       "dtype: int64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过显式索引修改数据\n",
    "ser1['一季度'] = 380\n",
    "ser1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec83a364-eea1-4df8-aba4-4765b45a176b",
   "metadata": {},
   "source": [
    "## 切片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "c24969a8-19b5-4dd6-b7c3-af0aefaacb9b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(一季度    320\n",
       " 二季度    180\n",
       " 三季度    300\n",
       " 四季度    405\n",
       " dtype: int64,\n",
       " 二季度    180\n",
       " 三季度    300\n",
       " dtype: int64)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用隐式索引切片，左闭右开区间\n",
    "ser2, ser2[1:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "0bb13d92-2364-44ee-8ae0-8449ab0820aa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "二季度    180\n",
       "三季度    300\n",
       "四季度    405\n",
       "dtype: int64"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 显示索引切片，闭区间\n",
    "ser2['二季度': '四季度']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "fc291156-00bf-4b90-9ec4-c7aac81d66ed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "一季度    320\n",
       "二季度    400\n",
       "三季度    500\n",
       "四季度    405\n",
       "dtype: int64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用隐式索引批量修改数据\n",
    "ser2[1:3] = 400, 500\n",
    "ser2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e5bbeb4-1a49-424e-9dbe-cf6a18f7071b",
   "metadata": {},
   "source": [
    "## 花式索引\n",
    "\n",
    "使用双层方括号。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "3d88decb-04ab-4c03-9cbd-2e1e90b2347d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(一季度    320\n",
       " 二季度    400\n",
       " 三季度    500\n",
       " 四季度    405\n",
       " dtype: int64,\n",
       " 二季度    400\n",
       " 四季度    405\n",
       " dtype: int64)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 显示索引取二季度和四季度的数据\n",
    "ser2, ser2[['二季度', '四季度']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "97a7419c-2602-4a91-bcef-9751d45a32be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "一季度    320\n",
       "二季度    600\n",
       "三季度    500\n",
       "四季度    520\n",
       "dtype: int64"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 显示索引批量修改数据\n",
    "ser2[['二季度', '四季度']] = 600, 520\n",
    "ser2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65b7061d-7965-4b03-80cd-f640ef239efe",
   "metadata": {},
   "source": [
    "## 布尔索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "1112c895-ee04-4815-8bdb-7d39c87349d1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "二季度    600\n",
       "三季度    500\n",
       "四季度    520\n",
       "dtype: int64"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 筛选大于等于500的数据\n",
    "ser2[ser2 >= 500]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e63f7f6-8952-4d42-a07c-1dc77872373d",
   "metadata": {},
   "source": [
    "## 属性和方法\n",
    "\n",
    "### 属性\n",
    "\n",
    "\n",
    "| 属性                      | 说明                                    |\n",
    "| ------------------------- | --------------------------------------- |\n",
    "| `dtype` / `dtypes`        | 返回`Series`对象的数据类型              |\n",
    "| `hasnans`                 | 判断`Series`对象中有没有空值            |\n",
    "| `at` / `iat`              | 通过索引访问`Series`对象中的单个值      |\n",
    "| `loc` / `iloc`            | 通过索引访问`Series`对象中的单个值或一组值 |\n",
    "| `index`                   | 返回`Series`对象的索引（`Index`对象）     |\n",
    "| `is_monotonic`            | 判断`Series`对象中的数据是否单调        |\n",
    "| `is_monotonic_increasing` | 判断`Series`对象中的数据是否单调递增    |\n",
    "| `is_monotonic_decreasing` | 判断`Series`对象中的数据是否单调递减    |\n",
    "| `is_unique`               | 判断`Series`对象中的数据是否独一无二    |\n",
    "| `size`                    | 返回`Series`对象中元素的个数            |\n",
    "| `values`                  | 以`ndarray`的方式返回`Series`对象中的值（`ndarray`对象） |\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "32a781b8-a15e-455d-bd3c-1ba7f5fc3ab8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "一季度    320\n",
      "二季度    600\n",
      "三季度    500\n",
      "四季度    520\n",
      "dtype: int64\n",
      "-----\n",
      "int64\n",
      "False\n",
      "Index(['一季度', '二季度', '三季度', '四季度'], dtype='object')\n",
      "[320 600 500 520]\n",
      "False\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "print(ser2)\n",
    "print('-----')\n",
    "print(ser2.dtype)                    # 数据类型\n",
    "print(ser2.hasnans)                  # 有没有空值\n",
    "print(ser2.index)                    # 索引\n",
    "print(ser2.values)                   # 值\n",
    "print(ser2.is_monotonic_increasing)  # 是否单调递增\n",
    "print(ser2.is_unique)                # 是否每个值都独一无二"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3933c7ab-5dec-4884-9cd6-3404cd57e4ab",
   "metadata": {},
   "source": [
    "### 统计相关的方法\n",
    "\n",
    "- unique 去重\n",
    "- nunique 统计不重复值的数量\n",
    "- value_counts 统计每个值出现的次数，返回Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "136fc32e-f7af-471e-b9cc-b692198df629",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4\n",
      "1940\n",
      "485.0\n",
      "510.0\n",
      "600\n",
      "320\n",
      "118.18065267490557\n",
      "13966.666666666666\n"
     ]
    }
   ],
   "source": [
    "print(ser2.count())   # 计数\n",
    "print(ser2.sum())     # 求和\n",
    "print(ser2.mean())    # 求平均\n",
    "print(ser2.median())  # 找中位数\n",
    "print(ser2.max())     # 找最大\n",
    "print(ser2.min())     # 找最小\n",
    "print(ser2.std())     # 求标准差\n",
    "print(ser2.var())     # 求方差"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "ded73b8d-2020-4090-945d-9121e9a1e043",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count      4.000000\n",
       "mean     485.000000\n",
       "std      118.180653\n",
       "min      320.000000\n",
       "25%      455.000000\n",
       "50%      510.000000\n",
       "75%      540.000000\n",
       "max      600.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取以上所有统计信息，返回Series\n",
    "ser2.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "7f40db9b-187c-4e80-a7f3-8f2eea014144",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "apple     3\n",
       "pitaya    2\n",
       "banana    1\n",
       "durian    1\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 统计每个值出现的次数\n",
    "ser3 = pd.Series(data=['apple', 'banana', 'apple', 'pitaya', 'apple', 'pitaya', 'durian'])\n",
    "ser3.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "a2b8784a-0b31-46c8-8566-4b7da6adc07a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 统计唯一值的个数\n",
    "ser3.nunique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "191ccf46-b5a2-4f91-9e1f-27cc710e335b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    apple\n",
       "dtype: object"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 众数，返回Series\n",
    "ser3.mode()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69b68fcf-21e8-4136-b4ea-afd31ba69047",
   "metadata": {},
   "source": [
    "### 处理缺失值\n",
    "\n",
    "- isna 判断是否是空值\n",
    "- isnull 判断是否是空值\n",
    "- notna 判断是否不是空值\n",
    "- notnull 判断是否不是空值\n",
    "- python内置的 `None` 和 pandas中的 `pd.nan`都表示空值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "4a766318-814d-4ff9-ad25-299a902d53bc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0    10.0\n",
       " 1    20.0\n",
       " 2     NaN\n",
       " 3    30.0\n",
       " 4     NaN\n",
       " dtype: float64,\n",
       " 0    False\n",
       " 1    False\n",
       " 2     True\n",
       " 3    False\n",
       " 4     True\n",
       " dtype: bool)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser4 = pd.Series(data=[10, 20, np.nan, 30, None])\n",
    "ser4, ser4.isna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "6d5b5d06-3a5b-474c-b191-1eb99e806d1a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     True\n",
       "1     True\n",
       "2    False\n",
       "3     True\n",
       "4    False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 判断不是不是空值\n",
    "ser4.notna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "57964b0c-5919-4fb9-9166-45bad8faab6b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0    10.0\n",
       " 1    20.0\n",
       " 2     NaN\n",
       " 3    30.0\n",
       " 4     NaN\n",
       " dtype: float64,\n",
       " 0    10.0\n",
       " 1    20.0\n",
       " 3    30.0\n",
       " dtype: float64)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除空值\n",
    "ser4, ser4.dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "4effc436-aae5-4e1a-9684-4e5059d069bf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    10.0\n",
       "1    20.0\n",
       "2    40.0\n",
       "3    30.0\n",
       "4    40.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 批量填充空值\n",
    "ser4.fillna(value=40)  # 将空值填充为40"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "5f281b17-74fa-41ad-a51a-906753d0ced8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0    10.0\n",
       " 1    20.0\n",
       " 2     NaN\n",
       " 3    30.0\n",
       " 4     NaN\n",
       " dtype: float64,\n",
       " 0    10.0\n",
       " 1    20.0\n",
       " 2    20.0\n",
       " 3    30.0\n",
       " 4    30.0\n",
       " dtype: float64)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser4, ser4.ffill()  # 用空值前面的非空值填充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "1c390643-6fbd-4a7c-bfc5-a11a2e54ae1e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0    10.0\n",
       " 1    20.0\n",
       " 2     NaN\n",
       " 3    30.0\n",
       " 4     NaN\n",
       " dtype: float64,\n",
       " 0    10.0\n",
       " 1    20.0\n",
       " 2    30.0\n",
       " 3    30.0\n",
       " 4     NaN\n",
       " dtype: float64)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser4, ser4.bfill() # 同上，但是None不填充"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a92d83a-eeea-4ab8-9c0c-743a46262a84",
   "metadata": {},
   "source": [
    "dropna()和fillna()方法都有一个名为inplace的参数，它的默认值是False，表示删除空值或填充空值不会修改原来的Series对象，而是返回一个新的Series对象。如果将inplace参数的值修改为True，那么删除或填充空值会就地操作，直接修改原来的Series对象，此时方法的返回值是None。后面我们会接触到的很多方法，包括DataFrame对象的很多方法都会有这个参数，它们的意义跟这里是一样的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "e3111f98-96a7-476c-b916-ccda61c76457",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    NaN\n",
       "1    1.0\n",
       "2    2.0\n",
       "3    3.0\n",
       "4    4.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 条件判断，不满足条件的替换为na\n",
    "ser5 = pd.Series(range(5))\n",
    "ser5.where(ser5 > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "76526877-406f-4e79-847b-7e133f901a32",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    10\n",
       "1    10\n",
       "2     2\n",
       "3     3\n",
       "4     4\n",
       "dtype: int64"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 不满足条件的替换为10\n",
    "ser5.where(ser5 > 1, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "4a29e182-1fb3-4e54-bb0b-900e12def9c2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     0\n",
       "1     1\n",
       "2    10\n",
       "3    10\n",
       "4    10\n",
       "dtype: int64"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 满足条件的替换\n",
    "ser5.mask(ser5 > 1, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "9170072b-4e99-477a-ae95-edc592cdfe0f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0     apple\n",
       " 1    banana\n",
       " 2     apple\n",
       " 3    pitaya\n",
       " 4     apple\n",
       " 5    pitaya\n",
       " 6    durian\n",
       " dtype: object,\n",
       " 0    False\n",
       " 1    False\n",
       " 2     True\n",
       " 3    False\n",
       " 4     True\n",
       " 5     True\n",
       " 6    False\n",
       " dtype: bool)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 判断是否有重复值\n",
    "ser3, ser3.duplicated()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "0cc66b83-e029-4641-ba39-ccbb580ad8bf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     apple\n",
       "1    banana\n",
       "3    pitaya\n",
       "6    durian\n",
       "dtype: object"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 去重\n",
    "ser3.drop_duplicates()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a23479b1-8bd5-4dee-a111-ed7e8c938cf9",
   "metadata": {},
   "source": [
    "Series对象的apply()和map()方法非常重要，它们可以通过字典或者指定的函数来处理数据，把数据映射或转换成我们想要的样子。这两个方法在数据准备阶段非常重要"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "a1581f20-24ea-46d2-86b8-730d6130d07f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       cat\n",
       "1       dog\n",
       "2       NaN\n",
       "3    rabbit\n",
       "dtype: object"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser6 = pd.Series(['cat', 'dog', np.nan, 'rabbit'])\n",
    "ser6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "b6ad33b8-aec5-45b1-8f74-3c2d689389bc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    kitten\n",
       "1     puppy\n",
       "2       NaN\n",
       "3       NaN\n",
       "dtype: object"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过字典进行映射，没有映射的用nan替代\n",
    "ser6.map({'cat': 'kitten', 'dog': 'puppy'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "a2627281-f01a-4225-b13c-c757b1a7f9fe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       I am a cat\n",
       "1       I am a dog\n",
       "2              NaN\n",
       "3    I am a rabbit\n",
       "dtype: object"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser6.map('I am a {}'.format, \n",
    "         na_action='ignore') # 忽视空值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "8c010f8c-03ff-46e7-a0ce-81c9d86d4d29",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "London      20\n",
       "New York    21\n",
       "Helsinki    12\n",
       "dtype: int64"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser7 = pd.Series([20, 21, 12],  index=['London', 'New York', 'Helsinki'])\n",
    "ser7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "05de94e6-b0da-4d1f-a33d-7c69000780b9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "London      400\n",
       "New York    441\n",
       "Helsinki    144\n",
       "dtype: int64"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用函数映射\n",
    "ser7.apply(np.square)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "003773da-b7af-4346-a6a5-4303462cd37e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "London      15\n",
       "New York    16\n",
       "Helsinki     7\n",
       "dtype: int64"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用lambda表达式映射\n",
    "ser7.apply(lambda x, value: x - value, \n",
    "           args=(5, )) # 给lambda表达式第二个参数传参，value=5"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d58da83-6af9-4385-8e59-14ec100686db",
   "metadata": {},
   "source": [
    "### 取头部值和排序\n",
    "\n",
    "Series对象的sort_index()和sort_values()方法可以用于对索引和数据的排序，排序方法有一个名为ascending的布尔类型参数，该参数用于控制排序的结果是升序还是降序；而名为kind的参数则用来控制排序使用的算法，默认使用了quicksort，也可以选择mergesort或heapsort；如果存在空值，那么可以用na_position参数空值放在最前还是最后，默认是last"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "fffa5afe-51c7-40ac-939b-f25911fac44c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(grape     35\n",
       " banana    96\n",
       " pitaya    12\n",
       " apple     57\n",
       " peach     25\n",
       " orange    89\n",
       " dtype: int64,\n",
       " pitaya    12\n",
       " peach     25\n",
       " grape     35\n",
       " apple     57\n",
       " orange    89\n",
       " banana    96\n",
       " dtype: int64)"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser8 = pd.Series(\n",
    "    data=[35, 96, 12, 57, 25, 89], \n",
    "    index=['grape', 'banana', 'pitaya', 'apple', 'peach', 'orange']\n",
    ")\n",
    "ser8, ser8.sort_values()  # 按值从小到大排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "43c0850a-2ca8-4590-82e1-236186b21394",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "banana    96\n",
       "orange    89\n",
       "apple     57\n",
       "dtype: int64"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser8.nlargest(3)  # 值最大的3个"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "59dca1f2-3aad-482c-842a-ad0db42d79f4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pitaya    12\n",
       "peach     25\n",
       "dtype: int64"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ser8.nsmallest(2)  # 值最小的2个"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dc66bd7a-65d8-4f99-9b75-8645e5951598",
   "metadata": {},
   "source": [
    "## pandas数据可视化\n",
    "\n",
    "Series对象有一个名为plot的方法可以用来生成图表，如果选择生成折线图、饼图、柱状图等，默认会使用Series对象的索引作为横坐标，使用Series对象的数据作为纵坐标。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "b7b5e032-047c-4b80-8547-5d7421426c6c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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dGzdurXRNhs3boxRo0ZF586d89eZMmVK7N+///j8RABAdQXKgw8+mONj1apVsWzZsti3b1+MGDEidu3a1bDN1VdfHffdd18sWrQob7958+a44oorGtYfOHAgx8nevXvj4YcfjrvvvjsWLFgQ06dPP74/GQDQYrVrysZLlixp9DyFRRoBWb16dbz73e+OHTt2xF133RULFy6Miy66KG8zf/78GDhwYI6aCy64IJYuXRrr1q2L5cuXR+/evWPIkCExa9asuPbaa2PGjBnRoUOH4/sTAgDVNQclBUnSo0eP/JhCJY2qDB8+vGGbAQMGRL9+/WLlypX5eXocPHhwjpOKurq62LlzZ6xdu/aI32fPnj15/aELANB6HXOgHDx4MK666qp4xzveEWeddVZ+bcuWLXkEpHv37o22TTGS1lW2OTROKusr644296Vbt24NS9++fY91twGA1hwoaS7KH/7wh7jnnnviRJs6dWoeraksmzZtOuHfEwBoIXNQKiZOnBiLFy+Ohx56KE477bSG1/v06ZMnv27fvr3RKEq6iietq2zz6KOPNvp6lat8KtscrmPHjnkBAKpDk0ZQ6uvrc5zce++98ctf/jLOOOOMRuuHDh0a7du3jxUrVjS8li5DTpcVDxs2LD9Pj2vWrIlt27Y1bJOuCKqtrY1Bgwa98p8IAKiuEZR0WiddofPTn/403wulMmckzQs56aST8uP48eNj8uTJeeJsio5JkyblKElX8CTpsuQUImPHjo05c+bkrzFt2rT8tY2SAABNDpTbbrstP77nPe9p9Hq6lPiTn/xk/vjmm2+OmpqafIO2dPVNukJn3rx5Ddu2bds2nx668sorc7h06dIlxo0bFzNnznREAICmB0o6xfPfdOrUKebOnZuXo+nfv3888MADTfnWAEAV8V48AEBxBAoAUByBAgAUR6AAAMURKABAcQQKAFAcgQIAtI734gForU6/7v6oRs/dOKq5dwEaMYICABRHoAAAxREoAEBxBAoAUByBAgAUR6AAAMURKABAcQQKAFAcgQIAFEegAADFESgAQHEECgBQHIECABRHoAAAxREoAEBxBAoAUByBAgAUR6AAAMURKABAcQQKAFAcgQIAFEegAADFESgAQHEECgBQHIECABRHoAAAxREoAEBxBAoAUByBAgAUR6AAAMURKABAcQQKAFAcgQIAFEeg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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 通过plt显示图表\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "ser9 = pd.Series({'Q1': 400, 'Q2': 520, 'Q3': 180, 'Q4': 380})\n",
    "# 通过plot方法的kind指定图表类型为柱状图\n",
    "ser9.plot(kind='bar')\n",
    "# # 定制纵轴的取值范围\n",
    "# plt.ylim(0, 600)\n",
    "# # 定制横轴刻度（旋转到0度）\n",
    "# plt.xticks(rotation=0)\n",
    "# # 为柱子增加数据标签\n",
    "# for i in range(ser9.size):\n",
    "#     plt.text(i, ser9.iloc[i] + 5, ser9.iloc[i], ha='center')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "e116d529-2a46-42a8-9397-60e1c5461eaf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 饼图\n",
    "# plot方法的kind参数指定了图表类型为饼图\n",
    "# autopct会自动计算并显示百分比\n",
    "# pctdistance用来控制百分比到圆心的距离\n",
    "ser9.plot(kind='pie', autopct='%.1f%%', pctdistance=0.65)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4c8feee8-5d1a-4089-93d9-61e427866827",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
